package com.bkhc.business.repository;

import com.bkhc.business.entity.Group;
import com.bkhc.business.entity.Member;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;

@Repository
public interface GroupRepository extends JpaRepository<Group,String> , JpaSpecificationExecutor<Group> {

//    default Page<Member> findAll(Member customer, Pageable pageable){
//     return findAll(new Specification<Member>() {
//         @Override
//         public Predicate toPredicate(Root<Member> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
//             List<Predicate> predicate = new ArrayList<>();
//             if(!StringUtils.isEmpty(customer.getGroupCode())){
//                 predicate.add(criteriaBuilder.equal(root.get("groupCode").as(String.class), customer.getGroupCode()));
//             }
//             Predicate[] pre = new Predicate[predicate.size()];
//
//             return criteriaQuery.where(predicate.toArray(pre)).getRestriction();
//         }
//     },pageable);
//
//
//    }

    Group findByManager(String manager);
    Group findByGroupName(String groupName);

    @Query("select Max(m.id) from Group  m")
    Integer generateGroupCode();

    Group findByGroupCode(String groupCode);
}
